Fix a bootstrapping problem without root windows
authorMatthias Clasen <mclasen@redhat.com>
Sat, 12 Aug 2017 13:36:49 +0000 (09:36 -0400)
committerMatthias Clasen <mclasen@redhat.com>
Sat, 12 Aug 2017 13:42:19 +0000 (09:42 -0400)
We create various windows during the initial creation of display
objects, which causes some bootstrapping issues when we try to
find the default screen to get its root window. To work around this,
pass the display object into gdk_window_new.

This is not an API change, since gdk_window_new is no longer public API.

gdk/gdkinternals.h
gdk/gdkwindow.c
gdk/wayland/gdkwindow-wayland.c

index acff6f0da2744ffafe352a9f113568c5f877f38b..537741bf2a8e2e66839d6ce5ed3b02108e837cae 100644 (file)
@@ -368,7 +368,8 @@ void            gdk_cairo_set_drawing_context    (cairo_t           *cr,
 cairo_surface_t *
            _gdk_window_ref_cairo_surface (GdkWindow *window);
 
-GdkWindow* gdk_window_new                (GdkWindow      *parent,
+GdkWindow* gdk_window_new                (GdkDisplay     *display,
+                                          GdkWindow      *parent,
                                           GdkWindowAttr  *attributes);
 void       _gdk_window_destroy           (GdkWindow      *window,
                                           gboolean        foreign_destroy);
index 0d6a82fba20b07de2ed88e72c9c5610e0d9e547c..010a27ea7dcb3db3b1ecd68765f31196cd9e935f 100644 (file)
@@ -976,12 +976,12 @@ get_native_event_mask (GdkWindow *private)
 }
 
 GdkWindow*
-gdk_window_new (GdkWindow     *parent,
+gdk_window_new (GdkDisplay    *display,
+                GdkWindow     *parent,
                GdkWindowAttr *attributes)
 {
   GdkWindow *window;
   GdkScreen *screen;
-  GdkDisplay *display;
   gboolean native;
   GdkEventMask event_mask;
 
@@ -989,7 +989,7 @@ gdk_window_new (GdkWindow     *parent,
 
   if (!parent)
     {
-      screen = gdk_screen_get_default ();
+      screen = gdk_display_get_default_screen (display);
       parent = gdk_screen_get_root_window (screen);
     }
   else
@@ -1003,8 +1003,6 @@ gdk_window_new (GdkWindow     *parent,
       return NULL;
     }
 
-  display = gdk_screen_get_display (screen);
-
   window = _gdk_display_create_window (display);
 
   window->parent = parent;
@@ -1159,7 +1157,7 @@ gdk_window_new_toplevel (GdkDisplay *display,
   attr.height = height;
   attr.window_type = GDK_WINDOW_TOPLEVEL;
 
-  return gdk_window_new (NULL, &attr);
+  return gdk_window_new (display, NULL, &attr);
 }
 
 /**
@@ -1193,7 +1191,7 @@ gdk_window_new_popup (GdkDisplay         *display,
   attr.height = position->height;
   attr.window_type = GDK_WINDOW_TEMP;
 
-  return gdk_window_new (NULL, &attr);
+  return gdk_window_new (display, NULL, &attr);
 }
 
 /**
@@ -1224,7 +1222,7 @@ gdk_window_new_temp (GdkDisplay *display)
   attr.height = 10;
   attr.window_type = GDK_WINDOW_TEMP;
 
-  return gdk_window_new (NULL, &attr);
+  return gdk_window_new (display, NULL, &attr);
 }
 
 /**
@@ -1256,7 +1254,7 @@ gdk_window_new_child (GdkWindow          *parent,
   attr.height = position->height;
   attr.window_type = GDK_WINDOW_CHILD;
 
-  return gdk_window_new (parent, &attr);
+  return gdk_window_new (gdk_window_get_display (parent), parent, &attr);
 }
 
 /**
index b6c4cee15908ae8a2e4c9d519891ac88a1711d21..c304799619ec207a06424c496dc5cf1be5c70ff7 100644 (file)
@@ -3719,7 +3719,8 @@ gdk_wayland_window_new_subsurface (GdkDisplay         *display,
   attr.height = position->height;
   attr.window_type = GDK_WINDOW_SUBSURFACE;
 
-  return gdk_window_new (gdk_screen_get_root_window (gdk_display_get_default_screen (display)),
+  return gdk_window_new (display,
+                         gdk_screen_get_root_window (gdk_display_get_default_screen (display)),
                          &attr);
 }